// pages/address/address.js
const app = getApp()
const request = require('../../utils/request')

Page({
  data: {
    // 地址列表
    addresses: [],
    // 是否加载中
    loading: false,
    // 是否编辑模式
    isEdit: false,
    // 是否选择模式（从其他页面跳转来选择地址）
    isSelectMode: false,
    // 当前默认地址ID
    defaultAddressId: null
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 判断是否是选择模式
    const isSelect = options.select === 'true' || options.select === '1'
    
    this.setData({
      isSelectMode: isSelect
    })
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 获取地址列表
    this.fetchAddresses()
  },

  /**
   * 获取地址列表
   */
  fetchAddresses() {
    const userId = app.getSafeUserId()
    
    this.setData({ loading: true })
    
    request.get(`/address/user/${userId}`, {}, {
      mock: {
        // 模拟数据
        list: [
          {
            id: 1,
            userId: userId,
            name: '张三',
            phone: '13812345678',
            province: '北京市',
            city: '北京市',
            district: '朝阳区',
            detailAddress: '光华路甲8号院中海广场C1座2102室',
            isDefault: true,
            tag: '家',
            createdAt: '2023-08-01T12:00:00'
          },
          {
            id: 2,
            userId: userId,
            name: '李四',
            phone: '13987654321',
            province: '北京市',
            city: '北京市',
            district: '海淀区',
            detailAddress: '中关村南大街5号院',
            isDefault: false,
            tag: '公司',
            createdAt: '2023-08-10T14:30:00'
          }
        ]
      }
    }).then(res => {
      this.setData({ loading: false })
      
      if (res.code === 200 && res.data) {
        // 格式化地址数据
        const addresses = this.formatAddresses(res.data.list || res.data)
        
        // 获取默认地址ID
        const defaultAddress = addresses.find(item => item.isDefault)
        const defaultAddressId = defaultAddress ? defaultAddress.id : null
        
        this.setData({
          addresses,
          defaultAddressId
        })
      } else {
        wx.showToast({
          title: res.message || '获取地址列表失败',
          icon: 'none'
        })
      }
    }).catch(err => {
      console.error('获取地址列表失败:', err)
      this.setData({ loading: false })
      
      wx.showToast({
        title: '获取地址列表失败',
        icon: 'none'
      })
    })
  },

  /**
   * 格式化地址数据
   */
  formatAddresses(addresses) {
    if (!addresses || !addresses.length) return []
    
    return addresses.map(address => {
      // 拼接完整地址
      const fullAddress = `${address.province} ${address.city} ${address.district} ${address.detailAddress}`
      
      return {
        ...address,
        fullAddress
      }
    })
  },

  /**
   * 切换编辑模式
   */
  toggleEditMode() {
    this.setData({
      isEdit: !this.data.isEdit
    })
  },

  /**
   * 添加新地址
   */
  addAddress() {
    wx.navigateTo({
      url: '/pages/address-edit/address-edit'
    })
  },

  /**
   * 编辑地址
   */
  editAddress(e) {
    const addressId = e.currentTarget.dataset.id
    
    wx.navigateTo({
      url: `/pages/address-edit/address-edit?id=${addressId}`
    })
  },

  /**
   * 删除地址
   */
  deleteAddress(e) {
    const addressId = e.currentTarget.dataset.id
    
    wx.showModal({
      title: '确认删除',
      content: '确定要删除该地址吗？',
      success: (res) => {
        if (res.confirm) {
          this.doDeleteAddress(addressId)
        }
      }
    })
  },

  /**
   * 执行删除地址
   */
  doDeleteAddress(addressId) {
    request.delete(`/address/${addressId}`, {}, {
      mock: { success: true }
    }).then(res => {
      if (res.code === 200) {
        // 从地址列表中移除
        const addresses = this.data.addresses.filter(item => item.id !== addressId)
        
        this.setData({ addresses })
        
        wx.showToast({
          title: '删除成功',
          icon: 'success'
        })
      } else {
        wx.showToast({
          title: res.message || '删除失败',
          icon: 'none'
        })
      }
    }).catch(err => {
      console.error('删除地址失败:', err)
      
      wx.showToast({
        title: '删除地址失败',
        icon: 'none'
      })
    })
  },

  /**
   * 设为默认地址
   */
  setDefaultAddress(e) {
    const addressId = e.currentTarget.dataset.id
    
    // 已经是默认地址，不需要处理
    if (addressId === this.data.defaultAddressId) return
    
    request.put(`/address/${addressId}/default`, {}, {
      mock: { success: true }
    }).then(res => {
      if (res.code === 200) {
        // 更新地址列表中的默认状态
        const addresses = this.data.addresses.map(item => {
          return {
            ...item,
            isDefault: item.id === addressId
          }
        })
        
        this.setData({
          addresses,
          defaultAddressId: addressId
        })
        
        wx.showToast({
          title: '设置成功',
          icon: 'success'
        })
      } else {
        wx.showToast({
          title: res.message || '设置失败',
          icon: 'none'
        })
      }
    }).catch(err => {
      console.error('设置默认地址失败:', err)
      
      wx.showToast({
        title: '设置默认地址失败',
        icon: 'none'
      })
    })
  },

  /**
   * 选择地址（选择模式下）
   */
  selectAddress(e) {
    // 只在选择模式下有效
    if (!this.data.isSelectMode) return
    
    const addressId = e.currentTarget.dataset.id
    const address = this.data.addresses.find(item => item.id === addressId)
    
    if (!address) return
    
    // 将选择的地址保存到全局
    app.globalData.selectedAddress = address
    
    // 返回上一页
    wx.navigateBack()
  }
}) 